﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Transactions;

namespace Unimaq.Macroprocesos.AccesoDatos
{
    public class ProcesoDAO
    {
        private ProcesosUnimaqEntities conexion;

        public List<Proceso> Listar()
        {
            using (conexion = new ProcesosUnimaqEntities())
            {
                return conexion.Proceso.Include("Documento").ToList();
            }
        }

        public int Registrar(Proceso nuevoProceso)
        {
            using (conexion = new ProcesosUnimaqEntities())
            {
                conexion.Proceso.Add(nuevoProceso);
                return conexion.SaveChanges();
            }
        }

        public int Actualizar(Proceso selectedProceso, Proceso updProceso)
        {
            using (conexion = new ProcesosUnimaqEntities())
            {
                conexion.Proceso.Attach(selectedProceso);
                selectedProceso.IdEmpresa = updProceso.IdEmpresa;
                selectedProceso.IdPadreProceso = updProceso.IdPadreProceso;
                selectedProceso.CodigoProceso = updProceso.CodigoProceso;
                selectedProceso.Nombre = updProceso.Nombre;
                selectedProceso.NumeroProceso = updProceso.NumeroProceso;
                selectedProceso.RutaAcceso = updProceso.RutaAcceso;
                return conexion.SaveChanges();
            }
        }

        public int Eliminar(Proceso selectedProceso)
        {
            int result = 0;

            using (TransactionScope ts = new TransactionScope())
            {
                using (conexion = new ProcesosUnimaqEntities())
                {
                    try
                    {
                        Proceso deleteProceso = conexion.Proceso.Single(x => x.Id == selectedProceso.Id);
                        conexion.Proceso.Remove(deleteProceso);
                        result = conexion.SaveChanges();
                        ts.Complete();
                    }
                    catch (Exception)
                    {
                        result = 0;
                    }
                } 
            }

            return result;
        }
    }
}
